package com.bjpowernode.javase.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
关于集合元素的remove。
    重点： 当集合的结构发生改变时：迭代器必须重新获取，如果还用以前老的迭代器，会出现异常。
    异常：java.util.ConcurrentModificationException

    重点:在迭代集合元素的过程中，不能调用集合对象的remove()方法删除元素。
    会出现java.util.ConcurrentModificationException异常。

 */
public class CollectionTest06 {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        //注意：此时获得的迭代器，指向的是集合中没有元素状态下的迭代器
        //只要集合结构发生变化，迭代器必须重新获取。
        //当集合结构发生了变化，迭代器没有重新获取是，调用next()方法会出现异常。
        //Iterator it1 = c.iterator();
        c.add(1);
        c.add(2);
        c.add(4);

        //获取迭代器
        Iterator it = c.iterator();
        while(it.hasNext()){
            //编写代码是next()方法返回值类型必须是Object。
            //Integer i = it.next();
            Object obj = it.next();
            System.out.println(obj);
        }

        Collection c2 = new ArrayList();
        c2.add("abc");
        c2.add("def");
        c2.add("xyz");

        Iterator it2 = c2.iterator();
        while(it2.hasNext()){
            Object obj = it2.next();
            //删除元素
            //删除元素之后，集合的结构发生了变化，应该重新获取迭代器
            //但是，循环下一次的时候并没有重新获取迭代器，所以会出现异常：java.util.ConcurrentModificationException。
            //c2.remove(obj);

            //使用迭代器来删除
            it2.remove();//删除的一定是迭代器当前指向的元素。
            System.out.println(obj);
        }
        System.out.println(c2.size());
    }
}
